package com.zdp.nio.channel.udpchannel.data;

import lombok.Builder;
import lombok.Data;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.DatagramChannel;
import java.util.Scanner;

/**
 * UDP 数据包发送
 * 客户端
 */
@Data
@Builder
public class UdpClient {

    private String ip;
    private Integer port;


    /**
     * UDP 发送消息
     * UDP 是无连接的，所以不需要等待连接建立，直接发送消息即可
     * @throws IOException
     */
    public void send() throws IOException {
        // 1. 获取 DatagramChannel实例
        DatagramChannel channel = DatagramChannel.open();
        // 1.1 设置非阻塞模式
        channel.configureBlocking(false);
        // 2. 获取 Buffer对象
        ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
        // 3. 发送消息
        Scanner scanner = new Scanner(System.in);
        System.out.println("> 请输入消息");
        while(scanner.hasNext()){
            String next = scanner.next();
            // 3.1 将消息写入到 Buffer
            byteBuffer.put(("> 消息内容 : " + next).getBytes());
            byteBuffer.flip();
            // 3.2 将Buffer内消息写入到通道
            channel.send(byteBuffer,new InetSocketAddress(ip,port));
            byteBuffer.clear();
        }
        // 4.关闭通道
        channel.close();
    }

}
